// 云函数入口文件
const cloud = require("wx-server-sdk");
const crypto = require("crypto");

// 初始化云开发环境
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV,
});

// 初始化数据库
const db = cloud.database();

// 密码加密函数
function encryptPassword(password) {
  const encrypted = crypto.createHash("sha256").update(password).digest("hex");
  console.log("密码加密详情：", {
    original: password,
    encrypted: encrypted,
    length: encrypted.length,
  });
  return encrypted;
}

// 检查数据库状态
async function checkDatabase() {
  try {
    const { data } = await db.collection("merchants").get();
    console.log("当前数据库中的商家数量：", data.length);
    if (data.length > 0) {
      console.log(
        "现有商家列表：",
        data.map((item) => ({
          username: item.username,
          name: item.name,
          status: item.status,
          password: item.password ? "已加密" : "未加密",
        }))
      );
    }
    return data;
  } catch (err) {
    console.error("检查数据库失败：", err);
    return [];
  }
}

// 更新测试账号密码
async function updateTestAccount() {
  try {
    const { data } = await db
      .collection("merchants")
      .where({
        username: "test_merchant",
      })
      .get();

    if (data.length > 0) {
      const encryptedPassword = encryptPassword("123456");
      // 更新测试账号密码为加密后的密码
      await db
        .collection("merchants")
        .doc(data[0]._id)
        .update({
          data: {
            password: encryptedPassword,
            updateTime: new Date(),
          },
        });
      console.log("测试账号密码更新成功，新密码：", encryptedPassword);
    }
  } catch (err) {
    console.error("更新测试账号密码失败：", err);
  }
}

// 初始化测试账号
async function initTestAccount() {
  try {
    // 检查是否已存在测试账号
    const { data } = await db
      .collection("merchants")
      .where({
        username: "test_merchant",
      })
      .get();

    if (data.length === 0) {
      // 创建测试账号
      const encryptedPassword = encryptPassword("123456");
      const testAccount = {
        username: "test_merchant",
        password: encryptedPassword,
        name: "测试商家",
        status: "active",
        createTime: new Date(),
        updateTime: new Date(),
      };

      const result = await db.collection("merchants").add({
        data: testAccount,
      });

      console.log("测试账号创建成功：", {
        _id: result._id,
        ...testAccount,
        password: "已加密",
      });
    } else {
      console.log("测试账号已存在：", {
        ...data[0],
        password: data[0].password ? "已加密" : "未加密",
      });
      // 更新测试账号密码
      await updateTestAccount();
    }
  } catch (err) {
    console.error("初始化测试账号失败：", err);
  }
}

// 云函数入口函数
exports.main = async (event, context) => {
  const { username, password } = event;

  console.log("收到登录请求，参数：", { username });

  try {
    // 检查数据库状态
    await checkDatabase();

    // 初始化测试账号
    await initTestAccount();

    // 查询商家账号
    const encryptedPassword = encryptPassword(password);
    console.log("登录密码加密结果：", encryptedPassword);

    // 先查询用户名是否存在
    const { data: userData } = await db
      .collection("merchants")
      .where({
        username: username,
      })
      .get();

    console.log("用户名查询结果：", userData);

    if (userData.length === 0) {
      return {
        code: -1,
        msg: "账号不存在",
      };
    }

    // 查询完整信息
    const { data } = await db
      .collection("merchants")
      .where({
        username: username,
        password: encryptedPassword,
      })
      .get();

    console.log("完整查询条件：", {
      username: username,
      password: encryptedPassword,
    });
    console.log("数据库查询结果：", data);

    if (data && data.length > 0) {
      // 登录成功
      const merchantInfo = data[0];

      // 验证商家状态
      if (merchantInfo.status !== "active") {
        return {
          code: -1,
          msg: "账号已被禁用，请联系管理员",
        };
      }

      return {
        code: 0,
        msg: "登录成功",
        data: {
          _id: merchantInfo._id,
          username: merchantInfo.username,
          name: merchantInfo.name,
          avatar: merchantInfo.avatar || "/images/default_avatar.png",
          status: merchantInfo.status,
          createTime: merchantInfo.createTime,
        },
      };
    } else {
      // 登录失败
      return {
        code: -1,
        msg: "密码错误",
      };
    }
  } catch (err) {
    console.error("商家登录失败：", err);
    return {
      code: -1,
      msg: "登录失败，请稍后重试",
    };
  }
};
